Background: the experiment that generated the raw sequencing data I am using in this RNA-seq experiment was conducted by University of Zurich.
I accessed this publicly available data on Sequence Read Archive (SRA), under the SRA identifier “SRP212102” ( https://www.ncbi.nlm.nih.gov/sra?term=SRP212102 ).
The following table shows the metadata of the experiment, including the samples that expresses wild type TRIM28 genes.
3 samples were mock infected and 3 samples were infected with influenza A virus at multiplicity of infection (MOI) of 10 Plaque forming units (PFU) per cell. RNA was extracted at 6 hours post infection.
| run_name |
sample_name |
genotype/variation |
infection |
source_name |
treatment |
| SRR9602253 |
GSM3905824 |
CRISPR/Cas9-edited TRIM28 KO lentivirally transduced with TRIM28 wt |
uninfected (mock) |
TRIM28 wt mock |
wt_mock |
| SRR9602254 |
GSM3905825 |
CRISPR/Cas9-edited TRIM28 KO lentivirally transduced with TRIM28 wt |
uninfected (mock) |
TRIM28 wt mock |
wt_mock |
| SRR9602255 |
GSM3905826 |
CRISPR/Cas9-edited TRIM28 KO lentivirally transduced with TRIM28 wt |
uninfected (mock) |
TRIM28 wt mock |
wt_mock |
| SRR9602256 |
GSM3905827 |
CRISPR/Cas9-edited TRIM28 KO lentivirally transduced with TRIM28 wt |
Influenza A/WSN/33, MOI10 PFU/cell, 6hpi |
TRIM28 wt IAV infected |
wt_infected |
| SRR9602257 |
GSM3905828 |
CRISPR/Cas9-edited TRIM28 KO lentivirally transduced with TRIM28 wt |
Influenza A/WSN/33, MOI10 PFU/cell, 6hpi |
TRIM28 wt IAV infected |
wt_infected |
| SRR9602258 |
GSM3905829 |
CRISPR/Cas9-edited TRIM28 KO lentivirally transduced with TRIM28 wt |
Influenza A/WSN/33, MOI10 PFU/cell, 6hpi |
TRIM28 wt IAV infected |
wt_infected |
The heatmap below shows the distances across the samples, indicating significant difference between the groups of mock infected and influenza infected samples. While there is great similarity between the untreated, mock infected samples, the influenza infected samples are not only distant from the mock samples but also from each other.

The principal component analysis of the samples supports the findings in the heatmap. The mock infected samples are similar to each other and significantly different from the influenza infected samples. The 72% of the variance of the dataset is explained by the first principal component, which is the presence of influenza A in the samples.

The summary below shows how DESeq filtered out genes while performing differential gene expression analysis comparing the mock infected and influenza infected samples.
out of 28469 with nonzero total read count
adjusted p-value < 0.1
LFC > 0 (up) : 5219, 18%
LFC < 0 (down) : 4185, 15%
outliers [1] : 15, 0.053%
low counts [2] : 8312, 29%
(mean count < 2)
[1] see 'cooksCutoff' argument of ?results
[2] see 'independentFiltering' argument of ?results
28469 genes were considered for differential expression as the rest of the genes have not been expressed. Outliers and genes with low counts (in this case mean count < 2) were filtered out. By default in this analysis a gene is considered to be differentially expressed if the adjusted p-value (for multiple testing correction) is less than 0.1. Based on that criteria there are 5219 upregulated and 4185 downregulated genes.
I further filtered this dataset by setting the treshold for adjusted p-value less than 0.01 and for the absolute value of log2 fold change greater than 2. Based on this approach there are 2194 differentially expressed genes in this dataset.
The interactive volcano plot below shows the magnitude of change in gene expression with its measure of significance. The red points are representing genes that are differentially expressed based on the tresholds described above. According to the plot the higher the log2 fold change the more significant the change is. While in the majority of the downregulated genes the absolute value of the log2 fold change is below 5, this value is 10 in the upregulated genes, showing significantly greater positive foldchanges after the influenza infection.
The heatmap below showsthe top 25 differentially expressed genes across the 6 samples. These genes are not expressed, or only with extremely low count in the mock infected samples while they are highly expressed in the influenza infected samples.
The gene counts were transformed by variance stabilizing transformation to obtain constant variance that is not dependent on the mean. The tables below shows the difference between the original and the transformed gene counts in the first five genes of the heatmap.
Original gene counts:
| |
GSM3905824 |
GSM3905825 |
GSM3905826 |
GSM3905827 |
GSM3905828 |
GSM3905829 |
| TSPOAP1 |
1 |
0 |
0 |
16 |
30 |
30 |
| ENDOU |
0 |
0 |
0 |
21 |
20 |
9 |
| GYS2 |
0 |
0 |
0 |
0 |
45 |
0 |
| BTN1A1 |
0 |
0 |
0 |
5 |
24 |
28 |
| OTOR |
0 |
0 |
0 |
19 |
98 |
31 |
Transformed gene counts:
| |
GSM3905824 |
GSM3905825 |
GSM3905826 |
GSM3905827 |
GSM3905828 |
GSM3905829 |
| TSPOAP1 |
3.795362 |
3.618101 |
3.618101 |
7.161759 |
5.679940 |
7.832773 |
| ENDOU |
3.618101 |
3.618101 |
3.618101 |
6.393970 |
6.520597 |
5.265706 |
| GYS2 |
3.618101 |
3.618101 |
3.618101 |
3.618101 |
7.097421 |
3.618101 |
| BTN1A1 |
3.618101 |
3.618101 |
3.618101 |
5.293014 |
6.236363 |
6.514976 |
| OTOR |
3.618101 |
3.618101 |
3.618101 |
6.569106 |
7.859810 |
6.640338 |
The following plot shows the top biological processes that are enriched in the differentially expressed genes.

The following table shows the list of over-representated KEGG pathways in the differentially expressed genes.
| Description |
GeneRatio |
p.adjust |
| Cytokine-cytokine receptor interaction |
46/596 |
0.0000000 |
| Viral protein interaction with cytokine and cytokine receptor |
23/596 |
0.0000000 |
| IL-17 signaling pathway |
22/596 |
0.0003400 |
| NF-kappa B signaling pathway |
21/596 |
0.0082176 |
| Staphylococcus aureus infection |
12/596 |
0.0165541 |
| TNF signaling pathway |
22/596 |
0.0180911 |
LS0tDQp0aXRsZTogPGNlbnRlcj4gPGgxPlJOQS1zZXEgYW5hbHlzaXMgb2Ygc2FtcGxlcyBleHByZXNzaW5nIHdpbGQgdHlwZSBUUklNMjggZ2VuZTwvaDE+IDwvY2VudGVyPg0Kb3V0cHV0OiBodG1sX25vdGVib29rDQotLS0NCg0KXCANClwgDQoNCg0KYGBge3IgbG9hZF9wYWNrYWdlcywgaW5jbHVkZT1GQUxTRX0NCmxpYnJhcnkoQmlvY01hbmFnZXIpDQpsaWJyYXJ5KGtuaXRyKQ0KbGlicmFyeSh0eGltcG9ydCkNCmxpYnJhcnkoREVTZXEyKQ0KbGlicmFyeShwaGVhdG1hcCkNCmxpYnJhcnkoZ2dwbG90MikNCmxpYnJhcnkoYmlvbWFSdCkNCmxpYnJhcnkocGxvdGx5KQ0KbGlicmFyeShSQ29sb3JCcmV3ZXIpDQpsaWJyYXJ5KGNsdXN0ZXJQcm9maWxlcikNCmxpYnJhcnkob3JnLkhzLmVnLmRiKQ0KbGlicmFyeShwYXRodmlldykNCmxpYnJhcnkoa25pdHIpDQpsaWJyYXJ5KGthYmxlRXh0cmEpDQpsaWJyYXJ5KHRpZHl2ZXJzZSkNCmBgYA0KDQoNCmBgYHtyIGxvYWRfZGF0YSwgaW5jbHVkZT1GQUxTRX0NCnNhbXBsZV90YWJsZSA8LSBhcy5kYXRhLmZyYW1lKHJlYWRfY3N2KCIuLi9TcmFSdW5UYWJsZS50eHQiKSkNCg0Kc2FtcGxlX3RhYmxlIDwtIHNlbGVjdChzYW1wbGVfdGFibGUsIFJ1biwgJ1NhbXBsZSBOYW1lJywgJ2dlbm90eXBlL3ZhcmlhdGlvbicsICBpbmZlY3Rpb24sIHNvdXJjZV9uYW1lKQ0KDQpzYW1wbGVfdGFibGUgPC0gcmVuYW1lKHNhbXBsZV90YWJsZSwgcnVuX25hbWU9UnVuLCBzYW1wbGVfbmFtZT0nU2FtcGxlIE5hbWUnKQ0KDQpzYW1wbGVfdGFibGUkdHJlYXRtZW50IDwtIGZhY3RvcihyZXAoYygid3RfbW9jayIsICJ3dF9pbmZlY3RlZCIsICI2S1JfbW9jayIsICI2S1JfaW5mZWN0ZWQiKSwgZWFjaCA9IDMpLCBsZXZlbHM9IGMoInd0X21vY2siLCAid3RfaW5mZWN0ZWQiLCAiNktSX21vY2siLCAiNktSX2luZmVjdGVkIikpDQoNCnNhbXBsZV9maWxlcz1saXN0LmZpbGVzKCJDOi9BbmNzaS9CaW9pbmZvcm1hdGljcyBTdXBwb3J0IFVuaXQvcHJvamVjdF92aXJ1c18yMDIwL3NhbG1vbl9vdXRwdXQiLCBmdWxsLm5hbWVzID0gVFJVRSwgcmVjdXJzaXZlID0gVFJVRSwgcGF0dGVybiA9ICJxdWFudC5zZiIpDQoNCm5hbWVzKHNhbXBsZV9maWxlcykgPSBwdWxsKHNhbXBsZV90YWJsZSwgc2FtcGxlX25hbWUpDQoNCmdlbmVfbWFwIDwtIHJlYWRfY3N2KCIuLi9wcm9qZWN0XzIwMjBfZ2VuZV9tYXAuY3N2IiwgY29sX25hbWVzID0gYygiZW5zdF9pZCIsICJlbnNnX2lkIikpDQoNCmBgYA0KDQoNCg0KYGBge3Igd3RfZGF0YV9hbmFseXNpcywgaW5jbHVkZT1GQUxTRX0NCg0Kc2FtcGxlX3RhYmxlX3d0ID0gc2FtcGxlX3RhYmxlWzE6NiwgXQ0KDQpzYW1wbGVfZmlsZXNfd3QgPSBzYW1wbGVfZmlsZXNbMTo2XQ0KDQp0eGlfd3QgPSB0eGltcG9ydChmaWxlcyA9IHNhbXBsZV9maWxlc193dCwNCiAgICAgICAgICAgICAgICAgIHR5cGUgPSAic2FsbW9uIiwNCiAgICAgICAgICAgICAgICAgIHR4MmdlbmUgPSBnZW5lX21hcCwNCiAgICAgICAgICAgICAgICAgIGlnbm9yZVR4VmVyc2lvbiA9IFRSVUUpDQoNCmRkc193dCA9IERFU2VxRGF0YVNldEZyb21UeGltcG9ydCh0eGkgPSB0eGlfd3QsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sRGF0YSA9IHNhbXBsZV90YWJsZV93dCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXNpZ24gPSB+IHRyZWF0bWVudCkNCg0KZGRzX3d0ID0gREVTZXEoZGRzX3d0KQ0KDQp2c3Rfd3QgPSB2YXJpYW5jZVN0YWJpbGl6aW5nVHJhbnNmb3JtYXRpb24oZGRzX3d0KQ0KDQpkaXN0X3d0ID0gYXMubWF0cml4KGRpc3QodChhc3NheSh2c3Rfd3QpKSkpDQoNCmBgYA0KDQoNCkJhY2tncm91bmQ6IHRoZSBleHBlcmltZW50IHRoYXQgZ2VuZXJhdGVkIHRoZSByYXcgc2VxdWVuY2luZyBkYXRhIEkgYW0gdXNpbmcgaW4gdGhpcyBSTkEtc2VxIGV4cGVyaW1lbnQgd2FzIGNvbmR1Y3RlZCBieSBVbml2ZXJzaXR5IG9mIFp1cmljaC5cDQpJIGFjY2Vzc2VkIHRoaXMgcHVibGljbHkgYXZhaWxhYmxlIGRhdGEgb24gU2VxdWVuY2UgUmVhZCBBcmNoaXZlIChTUkEpLCB1bmRlciB0aGUgU1JBIGlkZW50aWZpZXIgIlNSUDIxMjEwMiIgKCA8aHR0cHM6Ly93d3cubmNiaS5ubG0ubmloLmdvdi9zcmE/dGVybT1TUlAyMTIxMDI+ICkuXA0KXCANCg0KVGhlIGZvbGxvd2luZyB0YWJsZSBzaG93cyB0aGUgbWV0YWRhdGEgb2YgdGhlIGV4cGVyaW1lbnQsIGluY2x1ZGluZyB0aGUgc2FtcGxlcyB0aGF0IGV4cHJlc3NlcyB3aWxkIHR5cGUgVFJJTTI4IGdlbmVzLlwNCjMgc2FtcGxlcyB3ZXJlIG1vY2sgaW5mZWN0ZWQgYW5kIDMgc2FtcGxlcyB3ZXJlIGluZmVjdGVkIHdpdGggKippbmZsdWVuemEgQSB2aXJ1cyoqIGF0IG11bHRpcGxpY2l0eSBvZiBpbmZlY3Rpb24gKE1PSSkgb2YgMTAgUGxhcXVlIGZvcm1pbmcgdW5pdHMgKFBGVSkgcGVyIGNlbGwuIFJOQSB3YXMgZXh0cmFjdGVkIGF0IDYgaG91cnMgcG9zdCBpbmZlY3Rpb24uDQpcIA0KDQoNCmBgYHtyIHd0X21ldGEsIGVjaG89RkFMU0V9DQoNCmthYmxlKHNhbXBsZV90YWJsZV93dCkgJT4lIGthYmxlX3N0eWxpbmcoYm9vdHN0cmFwX29wdGlvbnMgPSBjKCJib3JkZXJlZCIsICJob3ZlciIpLCBmdWxsX3dpZHRoID0gRiwgcG9zaXRpb24gPSAibGVmdCIpDQoNCmBgYA0KDQoNClRoZSBoZWF0bWFwIGJlbG93IHNob3dzIHRoZSBkaXN0YW5jZXMgYWNyb3NzIHRoZSBzYW1wbGVzLCBpbmRpY2F0aW5nIHNpZ25pZmljYW50IGRpZmZlcmVuY2UgYmV0d2VlbiB0aGUgZ3JvdXBzIG9mIG1vY2sgaW5mZWN0ZWQgYW5kIGluZmx1ZW56YSBpbmZlY3RlZCBzYW1wbGVzLiBXaGlsZSB0aGVyZSBpcyBncmVhdCBzaW1pbGFyaXR5IGJldHdlZW4gdGhlIHVudHJlYXRlZCwgbW9jayBpbmZlY3RlZCBzYW1wbGVzLCB0aGUgaW5mbHVlbnphIGluZmVjdGVkIHNhbXBsZXMgYXJlIG5vdCBvbmx5IGRpc3RhbnQgZnJvbSB0aGUgbW9jayBzYW1wbGVzIGJ1dCBhbHNvIGZyb20gZWFjaCBvdGhlci4NCg0KYGBge3Igd3Rfc2FtcGxlX2Rpc3QsIGVjaG89RkFMU0V9DQoNCnBoZWF0bWFwKGRpc3Rfd3QpDQoNCmBgYA0KDQoNClRoZSBwcmluY2lwYWwgY29tcG9uZW50IGFuYWx5c2lzIG9mIHRoZSBzYW1wbGVzIHN1cHBvcnRzIHRoZSBmaW5kaW5ncyBpbiB0aGUgaGVhdG1hcC4gVGhlIG1vY2sgaW5mZWN0ZWQgc2FtcGxlcyBhcmUgc2ltaWxhciB0byBlYWNoIG90aGVyIGFuZCBzaWduaWZpY2FudGx5IGRpZmZlcmVudCBmcm9tIHRoZSBpbmZsdWVuemEgaW5mZWN0ZWQgc2FtcGxlcy4NClRoZSA3MiUgb2YgdGhlIHZhcmlhbmNlIG9mIHRoZSBkYXRhc2V0IGlzIGV4cGxhaW5lZCBieSB0aGUgZmlyc3QgcHJpbmNpcGFsIGNvbXBvbmVudCwgd2hpY2ggaXMgdGhlIHByZXNlbmNlIG9mIGluZmx1ZW56YSBBIGluIHRoZSBzYW1wbGVzLg0KDQpgYGB7ciB3dF9wbG90cGNhLCBlY2hvPUZBTFNFfQ0KcGxvdFBDQSh2c3Rfd3QsIGludGdyb3VwID0gInRyZWF0bWVudCIpDQpgYGANCg0KDQpgYGB7ciB3dF9yZXN1bHQsIGluY2x1ZGU9RkFMU0V9DQoNCnJlc3VsdF9kZHNfd3QgPSByZXN1bHRzKGRkc193dCwgY29udHJhc3QgPSBjKCJ0cmVhdG1lbnQiLCAid3RfaW5mZWN0ZWQiLCJ3dF9tb2NrIikpDQoNCmBgYA0KDQoNClRoZSBzdW1tYXJ5IGJlbG93IHNob3dzIGhvdyBERVNlcSBmaWx0ZXJlZCBvdXQgZ2VuZXMgd2hpbGUgcGVyZm9ybWluZyBkaWZmZXJlbnRpYWwgZ2VuZSBleHByZXNzaW9uIGFuYWx5c2lzIGNvbXBhcmluZyB0aGUgbW9jayBpbmZlY3RlZCBhbmQgaW5mbHVlbnphIGluZmVjdGVkIHNhbXBsZXMuDQoNCmBgYHtyIHd0X3Jlc3VsdF9zdW1tYXJ5LCBlY2hvPUZBTFNFfQ0Kc3VtbWFyeShyZXN1bHRfZGRzX3d0KQ0KYGBgDQoNCjI4NDY5IGdlbmVzIHdlcmUgY29uc2lkZXJlZCBmb3IgZGlmZmVyZW50aWFsIGV4cHJlc3Npb24gYXMgdGhlIHJlc3Qgb2YgdGhlIGdlbmVzIGhhdmUgbm90IGJlZW4gZXhwcmVzc2VkLg0KT3V0bGllcnMgYW5kIGdlbmVzIHdpdGggbG93IGNvdW50cyAoaW4gdGhpcyBjYXNlIG1lYW4gY291bnQgPCAyKSB3ZXJlIGZpbHRlcmVkIG91dC4NCkJ5IGRlZmF1bHQgaW4gdGhpcyBhbmFseXNpcyBhIGdlbmUgaXMgY29uc2lkZXJlZCB0byBiZSBkaWZmZXJlbnRpYWxseSBleHByZXNzZWQgaWYgdGhlIGFkanVzdGVkIHAtdmFsdWUgKGZvciBtdWx0aXBsZSB0ZXN0aW5nIGNvcnJlY3Rpb24pIGlzIGxlc3MgdGhhbiAwLjEuDQpCYXNlZCBvbiB0aGF0IGNyaXRlcmlhIHRoZXJlIGFyZSA1MjE5IHVwcmVndWxhdGVkIGFuZCA0MTg1IGRvd25yZWd1bGF0ZWQgZ2VuZXMuDQoNCkkgZnVydGhlciBmaWx0ZXJlZCB0aGlzIGRhdGFzZXQgYnkgc2V0dGluZyB0aGUgdHJlc2hvbGQgZm9yIGFkanVzdGVkIHAtdmFsdWUgbGVzcyB0aGFuIDAuMDEgYW5kIGZvciB0aGUgYWJzb2x1dGUgdmFsdWUgb2YgbG9nMiBmb2xkIGNoYW5nZSBncmVhdGVyIHRoYW4gMi4NCkJhc2VkIG9uIHRoaXMgYXBwcm9hY2ggdGhlcmUgYXJlIDIxOTQgZGlmZmVyZW50aWFsbHkgZXhwcmVzc2VkIGdlbmVzIGluIHRoaXMgZGF0YXNldC4NCg0KDQoNCg0KDQpgYGB7ciB3dF9hbm5vdGF0aW9uLCBpbmNsdWRlPUZBTFNFfQ0KcmVzdWx0X2Rkc193dF9kZiA9IGFzLmRhdGEuZnJhbWUocmVzdWx0X2Rkc193dCkNCg0KZGRzX3d0X2ZpbHRlcjEgPSByZXN1bHRfZGRzX3d0X2RmWyBjb21wbGV0ZS5jYXNlcyhyZXN1bHRfZGRzX3d0X2RmKSwgXQ0KDQoNCmRkc193dF9maWx0ZXIxID0gcm93bmFtZXNfdG9fY29sdW1uKGRkc193dF9maWx0ZXIxLCB2YXIgPSAnZW5zZ19pZCcpDQoNCg0KZW5zZW1ibDEwMCA9IHVzZUVuc2VtYmwoYmlvbWFydCA9ICdlbnNlbWJsJywgZGF0YXNldCA9ICdoc2FwaWVuc19nZW5lX2Vuc2VtYmwnKQ0KDQphbm5vdGF0aW9uX3d0ID0gZ2V0Qk0oYXR0cmlidXRlcyA9IGMoJ2Vuc2VtYmxfZ2VuZV9pZCcsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2VudHJlemdlbmVfaWQnLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdleHRlcm5hbF9nZW5lX25hbWUnLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdjaHJvbW9zb21lX25hbWUnLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdkZXNjcmlwdGlvbicpLA0KICAgICAgICAgICAgICAgICAgZmlsdGVycyA9ICdlbnNlbWJsX2dlbmVfaWQnLA0KICAgICAgICAgICAgICAgICAgdmFsdWVzID0gZGRzX3d0X2ZpbHRlcjEkZW5zZ19pZCwNCiAgICAgICAgICAgICAgICAgIG1hcnQgPSBlbnNlbWJsMTAwKQ0KDQphbm5vdGF0ZWRfZGRzX3d0X2ZpbHRlcjEgPSBsZWZ0X2pvaW4oZGRzX3d0X2ZpbHRlcjEsIGFubm90YXRpb25fd3QsIGJ5ID0gYygnZW5zZ19pZCcgPSAnZW5zZW1ibF9nZW5lX2lkJykgKQ0KYGBgDQoNCg0KDQoNCg0KDQpgYGB7ciB3dF92b2xjYW5vX3NjcmlwdCwgaW5jbHVkZT0gRkFMU0V9DQoNCiMgYWRkaW5nIGEgbmV3IGNvbHVtbiB3aXRoIGxvZ2ljYWwgdmFsdWVzIGRlY2lkaW5nIHdoZXRoZXIgYSBnZW5lIGlzIGRpZmZlcmVudGlhbGx5IGV4cHJlc3NlZCBvciBub3QNCmFubm90YXRlZF9kZHNfd3RfZmlsdGVyMSRkaWZmX2dlbmVzID0gYW5ub3RhdGVkX2Rkc193dF9maWx0ZXIxJHBhZGogPCAwLjAxICYgYWJzKGFubm90YXRlZF9kZHNfd3RfZmlsdGVyMSRsb2cyRm9sZENoYW5nZSkgPiAyDQoNCmFubm90YXRlZF9kZHNfd3RfZmlsdGVyMSRzaGFwZSA9IGlmZWxzZSgoLWxvZzEwKGFubm90YXRlZF9kZHNfd3RfZmlsdGVyMSRwYWRqKT41MCksICJ0cmlhbmdsZSIsICJjaXJjbGUiKQ0KYW5ub3RhdGVkX2Rkc193dF9maWx0ZXIxJGxpbWl0ZWRfcGFkaiA9IC1sb2cxMChhbm5vdGF0ZWRfZGRzX3d0X2ZpbHRlcjEkcGFkaikNCmFubm90YXRlZF9kZHNfd3RfZmlsdGVyMSRsaW1pdGVkX3BhZGpbYW5ub3RhdGVkX2Rkc193dF9maWx0ZXIxJGxpbWl0ZWRfcGFkaj41MF0gPSA1MA0KDQojIHRoZXJlIGFyZSAxNyBnZW5lcyB3aXRoIC1sb2cxMCBwYWRqIDUwIG9yIGFib3ZlIDUwDQoNCg0Kdm9sY2Fub19wbG90X3d0ID0gZ2dwbG90KGFubm90YXRlZF9kZHNfd3RfZmlsdGVyMSwgYWVzKHggPSBsb2cyRm9sZENoYW5nZSwgeSA9IGxpbWl0ZWRfcGFkaiwgY29sb3VyID0gZGlmZl9nZW5lcywgc2hhcGUgPSBzaGFwZSwgbmFtZSA9IGV4dGVybmFsX2dlbmVfbmFtZSkpICsNCiAgc2NhbGVfY29sb3JfbWFudWFsKHZhbHVlcyA9IGMoImJsYWNrIiwgInJlZCIpKSArDQogIGdlb21fcG9pbnQoc2l6ZSA9IDEuNSwgYWxwaGEgPSAwLjIpICsNCiAgZ2VvbV92bGluZSh4aW50ZXJjZXB0ID0gMiwgY29sb3VyID0gJ2dyZXknLCBsaW5ldHlwZSA9IDIpICsNCiAgZ2VvbV92bGluZSh4aW50ZXJjZXB0ID0gLTIsIGNvbG91ciA9ICdncmV5JywgbGluZXR5cGUgPSAyKSArDQogIGdlb21faGxpbmUoeWludGVyY2VwdCA9IC1sb2cxMCgwLjAxKSwgY29sb3VyID0gJ2dyZXknLCBsaW5ldHlwZSA9IDIpICsNCiAgeGxpbSgtMTAsIDEwKSArDQogIHlsaW0oMCwgNTApICsNCiAgdGhlbWVfYncoKSArDQogIGxhYnModGl0bGUgPSAiVm9sY2FubyBwbG90IG9mIHdpbGQgdHlwZSBUUklNMjggc2FtcGxlcyIsDQogICAgICAgeCA9ICJMb2cyRm9sZENoYW5nZSBvZiBnZW5lIGV4cHJlc3Npb24iLA0KICAgICAgIHkgPSAiLWxvZzEwIG9mIHRoZSBhZGp1c3RlZCBwLXZhbHVlIikgKw0KICB0aGVtZShsZWdlbmQucG9zaXRpb24gPSAnbm9uZScsDQogICAgICAgIGF4aXMudGl0bGUgPSBlbGVtZW50X3RleHQoZmFjZT0iYm9sZCIsIHNpemU9MTIpLA0KICAgICAgICBwbG90LnRpdGxlID0gZWxlbWVudF90ZXh0KGhqdXN0ID0gMC41ICxmYWNlPSJib2xkIiwgc2l6ZT0xNCksIA0KICAgICAgICBwbG90LnN1YnRpdGxlID0gZWxlbWVudF90ZXh0KGhqdXN0ID0gMC41LCBzaXplPTEyKSkNCg0KYGBgDQoNCg0KVGhlIGludGVyYWN0aXZlIHZvbGNhbm8gcGxvdCBiZWxvdyBzaG93cyB0aGUgbWFnbml0dWRlIG9mIGNoYW5nZSBpbiBnZW5lIGV4cHJlc3Npb24gd2l0aCBpdHMgbWVhc3VyZSBvZiBzaWduaWZpY2FuY2UuIFRoZSByZWQgcG9pbnRzIGFyZSByZXByZXNlbnRpbmcgZ2VuZXMgdGhhdCBhcmUgZGlmZmVyZW50aWFsbHkgZXhwcmVzc2VkIGJhc2VkIG9uIHRoZSB0cmVzaG9sZHMgZGVzY3JpYmVkIGFib3ZlLg0KQWNjb3JkaW5nIHRvIHRoZSBwbG90IHRoZSBoaWdoZXIgdGhlIGxvZzIgZm9sZCBjaGFuZ2UgdGhlIG1vcmUgc2lnbmlmaWNhbnQgdGhlIGNoYW5nZSBpcy4NCldoaWxlIGluIHRoZSBtYWpvcml0eSBvZiB0aGUgZG93bnJlZ3VsYXRlZCBnZW5lcyB0aGUgYWJzb2x1dGUgdmFsdWUgb2YgdGhlIGxvZzIgZm9sZCBjaGFuZ2UgaXMgYmVsb3cgNSwgdGhpcyB2YWx1ZSBpcyAxMCBpbiB0aGUgdXByZWd1bGF0ZWQgZ2VuZXMsIHNob3dpbmcgc2lnbmlmaWNhbnRseSBncmVhdGVyIHBvc2l0aXZlIGZvbGRjaGFuZ2VzIGFmdGVyIHRoZSBpbmZsdWVuemEgaW5mZWN0aW9uLg0KDQpgYGB7ciB3dF92b2xjYW5vX3Bsb3QsIGVjaG89RkFMU0V9DQpnZ3Bsb3RseSh2b2xjYW5vX3Bsb3Rfd3QpDQpgYGANCg0KDQpgYGB7ciB3dF9maWx0ZXJpbmcsIGluY2x1ZGU9RkFMU0V9DQpkZHNfd3RfZmlsdGVyMiA9IGRkc193dF9maWx0ZXIxW2Rkc193dF9maWx0ZXIxJHBhZGogPCAwLjAxLCBdDQoNCmRkc193dF9maWx0ZXIzID0gZGRzX3d0X2ZpbHRlcjJbIGFicyhkZHNfd3RfZmlsdGVyMiRsb2cyRm9sZENoYW5nZSkgPiAyLCBdDQoNCiNkZHNfd3RfZmlsdGVyMyA9IHJvd25hbWVzX3RvX2NvbHVtbihkZHNfd3RfZmlsdGVyMywgdmFyID0gImVuc2dfaWQiKQ0KDQphbm5vdGF0ZWRfZGRzX3d0X2ZpbHRlcjMgPSBsZWZ0X2pvaW4oZGRzX3d0X2ZpbHRlcjMsIGFubm90YXRpb25fd3QsIGJ5ID0gYygiZW5zZ19pZCIgPSAiZW5zZW1ibF9nZW5lX2lkIikpDQpgYGANCg0KDQoNCg0KYGBge3Igd3RfdG9wXzI1X2dlbmVzLCBpbmNsdWRlPUZBTFNFfQ0KdG9wXzI1X3d0ID0gYXJyYW5nZShhbm5vdGF0ZWRfZGRzX3d0X2ZpbHRlcjMsIGRlc2MoYWJzKGxvZzJGb2xkQ2hhbmdlKSkpWzE6MjUsIF0NCg0KZ2VuZXNfMjVfd3QgPSB0b3BfMjVfd3QkZW5zZ19pZA0KDQpuYW1lcyhnZW5lc18yNV93dCkgPSB0b3BfMjVfd3QkZXh0ZXJuYWxfZ2VuZV9uYW1lDQoNCg0KdG9wXzI1X3ZzdF93dCA9IGFzc2F5KHZzdF93dClbZ2VuZXNfMjVfd3QsIF0NCg0Kcm93bmFtZXModG9wXzI1X3ZzdF93dCkgPSBuYW1lcyhnZW5lc18yNV93dCkNCg0KDQpgYGANCg0KDQpUaGUgaGVhdG1hcCBiZWxvdyBzaG93c3RoZSB0b3AgMjUgZGlmZmVyZW50aWFsbHkgZXhwcmVzc2VkIGdlbmVzIGFjcm9zcyB0aGUgNiBzYW1wbGVzLiBUaGVzZSBnZW5lcyBhcmUgbm90IGV4cHJlc3NlZCwgb3Igb25seSB3aXRoIGV4dHJlbWVseSBsb3cgY291bnQgaW4gdGhlIG1vY2sgaW5mZWN0ZWQgc2FtcGxlcyB3aGlsZSB0aGV5IGFyZSBoaWdobHkgZXhwcmVzc2VkIGluIHRoZSBpbmZsdWVuemEgaW5mZWN0ZWQgc2FtcGxlcy4NCg0KDQoNCmBgYHtyIHd0X2NvbG91cnMsIGluY2x1ZGU9RkFMU0V9DQpjb2xvcnMgPSBjb2xvclJhbXBQYWxldHRlKGJyZXdlci5wYWwoNywgIkJsdWVzIikpKDEwMCkNCmBgYA0KDQoNCg0KDQpgYGB7ciB3dF90b3BfMjVfaGVhdG1hcCwgZWNobz1GQUxTRX0NCg0KcGhlYXRtYXAodG9wXzI1X3ZzdF93dCwgZm9udHNpemUgPSA3LCBjb2xvciA9IGNvbG9ycywgY3V0cmVlX2NvbHMgID0gMikNCg0KYGBgDQoNCg0KDQpgYGB7ciB3dF81LCBpbmNsdWRlPUZBTFNFfQ0Kd3RfY291bnRfNSA9IGFzLmRhdGEuZnJhbWUoY291bnRzKGRkc193dCkpDQoNCnd0X2NvdW50XzUgPSByb3duYW1lc190b19jb2x1bW4od3RfY291bnRfNSwgdmFyID0gImVuc2dfaWQiKQ0KDQp3dF9jb3VudF81ID0gIHd0X2NvdW50XzVbd3RfY291bnRfNSRlbnNnX2lkICAlaW4lIGdlbmVzXzI1X3d0LCBdWzE6NSwgXQ0KDQp3dF9jb3VudF81ID0gbGVmdF9qb2luKHd0X2NvdW50XzUsIGFubm90YXRpb25fd3RbICwgYygnZW5zZW1ibF9nZW5lX2lkJywnZXh0ZXJuYWxfZ2VuZV9uYW1lJyldLCBieSA9IGMoImVuc2dfaWQiID0gImVuc2VtYmxfZ2VuZV9pZCIpKQ0KDQp3dF9jb3VudF81ID0gY29sdW1uX3RvX3Jvd25hbWVzKHd0X2NvdW50XzUsJ2V4dGVybmFsX2dlbmVfbmFtZScgKQ0KDQp3dF9jb3VudF81JGVuc2dfaWQgPSBOVUxMDQoNCg0Kd3RfYXNzYXlfNSA9IGFzLmRhdGEuZnJhbWUoYXNzYXkodnN0X3d0KSkNCg0Kd3RfYXNzYXlfNSA9IHJvd25hbWVzX3RvX2NvbHVtbih3dF9hc3NheV81LCB2YXIgPSAiZW5zZ19pZCIpDQoNCnd0X2Fzc2F5XzUgPSAgd3RfYXNzYXlfNVt3dF9hc3NheV81JGVuc2dfaWQgICVpbiUgZ2VuZXNfMjVfd3QsIF1bMTo1LCBdDQoNCnd0X2Fzc2F5XzUgPSBsZWZ0X2pvaW4od3RfYXNzYXlfNSwgYW5ub3RhdGlvbl93dFsgLCBjKCdlbnNlbWJsX2dlbmVfaWQnLCdleHRlcm5hbF9nZW5lX25hbWUnKV0sIGJ5ID0gYygiZW5zZ19pZCIgPSAiZW5zZW1ibF9nZW5lX2lkIikpDQoNCnd0X2Fzc2F5XzUgPSBjb2x1bW5fdG9fcm93bmFtZXMod3RfYXNzYXlfNSwnZXh0ZXJuYWxfZ2VuZV9uYW1lJyApDQoNCnd0X2Fzc2F5XzUkZW5zZ19pZCA9IE5VTEwNCmBgYA0KDQoNClRoZSBnZW5lIGNvdW50cyB3ZXJlIHRyYW5zZm9ybWVkIGJ5IHZhcmlhbmNlIHN0YWJpbGl6aW5nIHRyYW5zZm9ybWF0aW9uIHRvIG9idGFpbiBjb25zdGFudCB2YXJpYW5jZSB0aGF0IGlzIG5vdCBkZXBlbmRlbnQgb24gdGhlIG1lYW4uDQpUaGUgdGFibGVzIGJlbG93IHNob3dzIHRoZSBkaWZmZXJlbmNlIGJldHdlZW4gdGhlIG9yaWdpbmFsIGFuZCB0aGUgdHJhbnNmb3JtZWQgZ2VuZSBjb3VudHMgaW4gdGhlIGZpcnN0IGZpdmUgZ2VuZXMgb2YgdGhlIGhlYXRtYXAuDQoNCk9yaWdpbmFsIGdlbmUgY291bnRzOg0KDQpgYGB7ciB0YWJsZV9jb3VudCwgZWNobz1GQUxTRX0NCmthYmxlKHd0X2NvdW50XzUpICU+JSBrYWJsZV9zdHlsaW5nKGJvb3RzdHJhcF9vcHRpb25zID0gYygiYm9yZGVyZWQiLCAiaG92ZXIiKSwgZnVsbF93aWR0aCA9IEYsIHBvc2l0aW9uID0gImxlZnQiKQ0KYGBgDQoNClRyYW5zZm9ybWVkIGdlbmUgY291bnRzOg0KDQpgYGB7ciB0YWJsZV9hc3NheSwgZWNobz1GQUxTRX0NCmthYmxlKHd0X2Fzc2F5XzUpICU+JSBrYWJsZV9zdHlsaW5nKGJvb3RzdHJhcF9vcHRpb25zID0gYygiYm9yZGVyZWQiLCAiaG92ZXIiKSwgZnVsbF93aWR0aCA9IEYsIHBvc2l0aW9uID0gImxlZnQiKQ0KYGBgDQoNCg0KYGBge3Igd3RfZ2VuZV9zZXRfZW5yaWNobWVudCwgaW5jbHVkZT1GQUxTRX0NCg0KZW50cmV6X2dlbmVfd3QgPSBhcy5jaGFyYWN0ZXIoYW5ub3RhdGVkX2Rkc193dF9maWx0ZXIzJGVudHJlemdlbmVfaWQpDQoNCmVudHJlel91bmlfd3QgPSBhcy5jaGFyYWN0ZXIoYW5ub3RhdGVkX2Rkc193dF9maWx0ZXIxJGVudHJlemdlbmVfaWQpDQoNCg0KZWdvX3d0ID0gZW5yaWNoR08oZ2VuZSA9IGVudHJlel9nZW5lX3d0LA0KICAgICAgICAgICAgICAgICAgT3JnRGIgPSBvcmcuSHMuZWcuZGIsDQogICAgICAgICAgICAgICAgICBvbnQgPSAiQlAiLA0KICAgICAgICAgICAgICAgICAgdW5pdmVyc2UgPSBlbnRyZXpfdW5pX3d0LA0KICAgICAgICAgICAgICAgICAgcmVhZGFibGUgPSBUUlVFKQ0KDQoNCmBgYA0KDQpUaGUgZm9sbG93aW5nIHBsb3Qgc2hvd3MgdGhlIHRvcCBiaW9sb2dpY2FsIHByb2Nlc3NlcyB0aGF0IGFyZSBlbnJpY2hlZCBpbiB0aGUgZGlmZmVyZW50aWFsbHkgZXhwcmVzc2VkIGdlbmVzLg0KDQpgYGB7ciB3dF9kb3RwbG90X2VucmljaG1lbnQsIGVjaG89RkFMU0V9DQpkb3RwbG90KGVnb193dCkNCg0KYGBgDQoNCg0KDQpgYGB7ciB3dF9rZWdnLCBpbmNsdWRlPUZBTFNFfQ0Ka2VnZ19wYXRod2F5X3d0ID0gZW5yaWNoS0VHRyhnZW5lID0gZW50cmV6X2dlbmVfd3QsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuaXZlcnNlID0gZW50cmV6X3VuaV93dCkNCg0Ka2VnZ193dF9kZiA9IGFzLmRhdGEuZnJhbWUoa2VnZ19wYXRod2F5X3d0KQ0KDQprZWdnX3d0X21haW4gPSBrZWdnX3d0X2RmWyAsIGMoIkRlc2NyaXB0aW9uIiwgIkdlbmVSYXRpbyIsICJwLmFkanVzdCIpXQ0KDQpyb3duYW1lcyhrZWdnX3d0X21haW4pID0gTlVMTA0KDQpgYGANCg0KDQpUaGUgZm9sbG93aW5nIHRhYmxlIHNob3dzIHRoZSBsaXN0IG9mIG92ZXItcmVwcmVzZW50YXRlZCBLRUdHIHBhdGh3YXlzIGluIHRoZSBkaWZmZXJlbnRpYWxseSBleHByZXNzZWQgZ2VuZXMuDQoNCmBgYHtyIGtlZ2dfdGFibGUsIGVjaG89RkFMU0V9DQprYWJsZShrZWdnX3d0X21haW4pICU+JSBrYWJsZV9zdHlsaW5nKGJvb3RzdHJhcF9vcHRpb25zID0gYygiYm9yZGVyZWQiLCAiaG92ZXIiKSwgZnVsbF93aWR0aCA9IEYsIHBvc2l0aW9uID0gImxlZnQiKQ0KYGBgDQoNCg0KDQoNCg0KDQo=